וחוץ מזה, המסדים הרי מחולקים בין השרתים, איך הם יכולים לוודא איפה המידע על המשתמש שלי נימצא?
7 תשובות
אני לא אספר לך איך פייסבוק עובדים כי אני לא יודע.
אבל אני כן יכול לתת לך כיוון.
נניח ששרת אחד אחראי על כל המשתמשים שהID שלהם מתחיל ב..
שרת אחר אחראי על כל המשתמשים שהID שלהם מתחיל ב...
בעקרון זה לא ממש עובד ככה, יש שרתים שכל תפקידם הוא לנתב את הבקשה לשרת הצוי, לשאוב ממנו מידע, ואף להעביר לו פקודות לביצוע כמו פקודות SQL למשל.
אחרי שמיצו את כל עניין ה replication,
השיטה העיקרית היא sharding.
אתה מוזמן לקרוא על זה קצת ברחבי הרשת.
בעולם האינטרנט חוץ משרתי ווב יש שרתים נוספים, במקרה הזה שרתי load balancing כמו HAProxy למשל.
מעבר לניטוב על בסיס שרת יש גם ניטוב על בסיס DNS. אם אתה גולש מישראל, הכתובת facebook.com מפנה אותך לIP של load balancer אחד, אם אתה גולש מארץ אחרת אתה מופנה אל load balancer אחר.
אחרי שאתה מגיע אל ה load balancer הוא מעביר אותך אל אחד ממאות השרתים שבפועל מבצעים את הקוד. וכל פעם זה שרת אחר. ככה שהם אפילו לא צריכים לחשוב לאיזה שרת לנטב אותך. אתה כל פעם תגיע לשרת אחר והכל יהיה בסדר.
לגבי מסדים הכל הרבה יותר מעניין. המידע שלך לא נשמר על שרת אחד, אלה על הרבה מאוד שרתים וכל פעם שאתה מעדכן משהו, זה מתעדכן על הרבה מאוד שרתים. איך זה עובד באופן כללי תוכל ללמוד מתוך קריאה על replication, כמו שהמליץ @raslin.
מעבר לזה כמה מילים נוספות: שרדינג היא אופציה אחת, אבל mysql כעצמו מציע אפשרות לעשות partitioning לפי אפשרויות שונות (לדוגמה לפי עמודה date וליצור partitions לפי כל 10 ימים, ככה שכשתבקש בשאילתה שלך לפי תאריך מסוים, הוא יחפש בparttion שהכי מתאים לו במקום לעשות scan על כל הטבלה - חוסך המון בביצועים).
HAProxy הוא פיתרון סבבה לגמרי, כנראה בין הטובים באופן סורס, אבל בכל מה שקשור לפיתרון tcp שלו (load balancing לדטהבייס) הוא לא עמד בעומס כשזה מגיע למאות מליוני פעולות ביום (שאילתות של write).
רצוי שתקרא גם על lvs ותראה איזה פיתרון באמת מתאים יותר למקרה שלך.
הערה קטנה בנושא replication:
שרדינג יכול לעבוד עם replication, זה לא סותר אחד את השני. בסופו של דבר זה נכון לעבוד בצורה של master-slave(s)
כי אתה גם מגבה את הדטה שלך לכמה שרתים, גם חוסך בעומס קריאות לשרתים, אבל כמובן שצריך שהארכיטטקוטרה של הדטהבייס תהיה נכונה, אחרת לא שיפרת בשיט את הביצועים.